// #include<stdio.h>
// #define LOG(fmt,...) printf("[%s:%d]", __FILE__, __LINE__,##__VA_ARGS__);
// int main()
// {
// //编译器内置的宏:__FILE__当前文件名;__LINE__当前行号。
//     LOG("你好世界")
//     return 0;
// }
/*
C语言中不定参函数的使用，不定参数据的访问
*/
#define _GNU_SOURCE
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
//参数类型一样
void printNum(int n, ...)
{
    va_list al;//可变参数
    va_start(al, n); //  获取指定参数的起始地址，这里就是获取n参数之后的第一个参数的起始地址
    for (int i = 0; i < n; i++)
    {
        int num = va_arg(al, int); // 从可变参数中取出⼀个整形参数
        printf("param[%d]:%d\n", i, num);
    }
    va_end(al); // 清空可变参数列表--其实是将al置空
}
//参数类型不一样 
void myprintf(const char*fmt,...)
{
    va_list ap;
    va_start(ap,fmt);
    char *res;
    //对不定参数的基本使用；給一个一级指针的地址进去，根据fmt里面的字符串格式，一个一个的取出参数列表的每个数。
    int ret=vasprintf(&res,fmt,ap);
    if(ret!=-1)
    {
        printf(res);
        free(res);
    }
    va_end(ap);//将ap指针置空
}
int main()
{
    printNum(3, 11, 22,33);
    printNum(5, 44, 55, 66, 77, 88);
    myprintf("%s %d","hello",521);
    return 0;
}